package com.kitbox.hl.meshow.common.utils.system;

import cn.hutool.core.lang.Console;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @Auther: honglei
 * @Date: 2019/9/6 15:59
 * @Description:  系统环境工具
 */
public class SystemEnvUtil {

    private static Log logger = LogFactory.getLog(SystemEnvUtil.class);
    /***** Java运行时环境信息 *****/
    // Java 运行时环境规范名称
    public final static String SPECIFICATION_NAME = "java.specification.name";
    // Java 运行时环境版本
    public final static String VERSION = "java.version";
    // Java 运行时环境规范版本
    public final static String SPECIFICATION_VERSION = "java.specification.version";
    // Java 运行时环境供应商
    public final static String VENDOR = "java.vendor";
    // Java 运行时环境规范供应商
    public final static String SPECIFICATION_VENDOR = "java.specification.vendor";
    // Java 供应商的 URL
    public final static String VENDOR_URL = "java.vendor.url";
    // Java 安装目录
    public final static String HOME = "java.home";
    // 加载库时搜索的路径列表
    public final static String LIBRARY_PATH = "java.library.path";
    // 默认的临时文件路径
    public final static String TMPDIR = "java.io.tmpdir";
    // 要使用的 JIT 编译器的名称
    public final static String COMPILER = "java.compiler";
    // 一个或多个扩展目录的路径
    public final static String EXT_DIRS = "java.ext.dirs";

    /***** Java虚拟机信息 *****/
    // Java 虚拟机实现名称
    public final static String VM_NAME = "java.vm.name";
    // Java 虚拟机规范名称
    public final static String VM_SPECIFICATION_NAME = "java.vm.specification.name";
    // Java 虚拟机实现版本
    public final static String VM_VERSION = "java.vm.version";
    // Java 虚拟机规范版本
    public final static String VM_SPECIFICATION_VERSION = "java.vm.specification.version";
    // Java 虚拟机实现供应商
    public final static String VM_VENDEOR = "java.vm.vendor";
    // Java 虚拟机规范供应商
    public final static String VM_SPECIFICATION_VENDOR = "java.vm.specification.vendor";

    /***** Java类信息 *****/
    // Java 类格式版本号
    public final static String CLASS_VERSION = "java.class.version";
    // Java 类路径
    public final static String CLASS_PATH = "java.class.path";

    /***** OS信息 *****/
    // 操作系统的名称
    public final static String OS_NAME = "os.name";
    // 操作系统的架构
    public final static String OS_ARCH = "os.arch";
    // 操作系统的版本
    public final static String OS_VERSION = "os.version";
    // 文件分隔符（在 UNIX 系统中是“/”）
    public final static String FILE_SEPRATOR = "file.separator";
    // 路径分隔符（在 UNIX 系统中是“:”）
    public final static String PATH_SEPRATOR = "path.separator";
    // 行分隔符（在 UNIX 系统中是“\n”）
    public final static String LINE_SEPRATOR = "line.separator";

    /***** 用户信息 *****/
    // 用户的账户名称
    public final static String USER_NAME = "user.name";
    // 用户的主目录
    public final static String USER_HOME = "user.home";
    // 用户的当前工作目录
    public final static String USER_DIR = "user.dir";





    /**
     * 取得系统属性，如果因为Java安全的限制而失败，则将错误打在Log中，然后返回 <code>null</code>。
     *
     * @param name 属性名
     * @param quiet 安静模式，不将出错信息打在<code>System.err</code>中
     *
     * @return 属性值或<code>null</code>
     */
    public static String get(String name, boolean quiet) {
        try {
            return System.getProperty(name);
        } catch (SecurityException e) {
            if (!quiet) {
                Console.error("Caught a SecurityException reading the system property '{}'; the SystemUtil property value will default to null.", name);
            }
            return null;
        }
    }

    /** 获取机器名 */
    public static final String getHostName() {
        String hostName = "";
        try {
            hostName = InetAddress.getLocalHost().getHostName();
        } catch (UnknownHostException e) {
            logger.error(e.getMessage(), e);
        }
        return hostName;
    }

    private static final String OS = System.getProperty("os.name").toLowerCase();

    public static boolean isWindows() {
        return OS.indexOf("win") >= 0;
    }

    public static boolean isWindowsXP() {
        return OS.indexOf("win") >= 0 && OS.indexOf("xp") >= 0;
    }

    public static boolean isMac() {
        return OS.indexOf("mac") >= 0;
    }

    public static boolean isUnix() {
        return OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") >= 0;
    }

    public static boolean isSolaris() {
        return (OS.indexOf("sunos") >= 0);
    }

    private static final String ARCH = System.getProperty("sun.arch.data.model");








}
